package cloud

import (
	"fmt"
	"github.com/astaxie/beego/logs"
	"github.com/astaxie/beego/orm"
	"smart_home/api/models"
	"smart_home/api/xfyun/depots"
	"tools"
)

func init() {
	registerCloud("notepad_get", notepad_get)
	registerCloud("notepad_put", notepad_put)
}

/*
我要存东西
帮我存东西
记住{content}放在{where}
*/
func notepad_put(rq *depots.Request, res *depots.XfyunResult, userParams *UserParams) {
	var (
		content, where *depots.RSlot
		err            error
		np             *models.Notepad
		msg            = "主人, 已帮您记住%s放在%s"
		o              = orm.NewOrm()
	)

	// 是否已经指定需要存放的物品
	if content = rq.GetSlot("content"); content == nil {
		res.Answer = "请问您要存放什么东西"
		res.Slot = "content"
		return
	}

	// 是否已经指定需要存放的物品
	if where = rq.GetSlot("where"); where == nil {
		res.Answer = "请问您要放在什么地方"
		res.Slot = "where"
		return
	}

	if np, err = models.GetNotePadByGoods(userParams.UserId, content.Value); err != nil {
		return
	}

	// 第一次存放
	if np == nil {
		np = &models.Notepad{
			UserId: userParams.UserId,
			Goods:  content.Value,
			Where:  where.Value,
		}
		err = models.AddNotepad(np)
	} else { // 修改存放地址
		np.Goods = content.Value
		np.Where = where.Value
		err = models.UpdateNotepad(np)
	}

	if err != nil {
		logs.Error("notepad_put error:", err)
		return
	}

	// 无外放设备
	if userParams.DeviceType == 1 {
		if err = tools.NewJpush().
			SetAlias(userParams.UserId).
			SetAlert(fmt.Sprintf(msg, content.Value, where.Value)).
			Jump("notepad").
			Send(); err != nil {
			logs.Error("notepad_get err:", err)
			o.Rollback()
			return
		}
	}

	res.Answer = fmt.Sprintf(msg, content.Value, where.Value)
}

/*
我要找东西
请问{content}在哪里
请问{content}放在哪里
我要取东西
*/
func notepad_get(rq *depots.Request, res *depots.XfyunResult, userParams *UserParams) {
	var (
		content *depots.RSlot
		err     error
		np      *models.Notepad
		o       = orm.NewOrm()
	)

	// 是否已经指定需要查找的物品
	if content = rq.GetSlot("content"); content == nil {
		res.Answer = "请问您要找什么东西"
		res.Slot = "content"
		return
	}

	if np, err = models.GetNotePadByGoods(userParams.UserId, content.Value); err != nil {
		return
	}
	if np == nil {
		res.Answer = "哎呀,没有找到" + content.Value
		return
	}

	res.Answer = content.Value + "放在" + np.Where

	o.Begin()

	if err = models.PushMessage(userParams.UserId, res.Answer, "message"); err != nil {
		logs.Error("notepad_get error:", err)
		o.Rollback()
		return
	}

	o.Commit()
	return
}
